package com.suray.wcs.service.pojo.rgv.rgv.protocol.message;

import com.suray.wcs.service.pojo.Rgv;
import com.suray.basic.wcs.utils.typedef.Bit;
import com.suray.basic.wcs.utils.typedef.Byte;
import com.suray.basic.wcs.utils.typedef.Word;
import com.suray.wcs.service.pojo.rgv.rgv.protocol.base.RgvSendMessage;
import com.suray.wcs.service.pojo.rgv.rgv.protocol.util.RgvMessageType;
import com.suray.wcs.service.pojo.sendmap.RgvFileSendSector;

public class RgvFileSendMessage extends RgvSendMessage {

    public RgvFileSendMessage(Rgv rgv, int maxPageNum, int pageNo, byte[] data) {
        super(rgv, "发送文件");

        baseDatas.add(new Word("firstFrame", "报文头帧：02 fd"));
        baseDatas.add(new Byte("deviceId", "小车对应设备号"));
        baseDatas.add(new Byte("life", "心跳、指令、任务共用，没发一帧数据+1,0-255循环，res收到后原数据返回"));
        baseDatas.add(new Bit(4, "frameType", "0. 心跳 1. 整体任务 2. 指令报文  3 调试指令模式  4文件传输模式"));
        baseDatas.add(new Bit(4, "version", "版本号"));
        baseDatas.add(new Word("总包数", "文件传输完成总共需要多少包"));
        baseDatas.add(new Word("数据包序号", "目前传输的是第几包"));
        for (int i = 1; i <= RgvFileSendSector.FILE_MESSAGE_DATA_SIZE; i++) {
            baseDatas.add(new Byte("数据" + i, "地图数据"));
            if (data.length >= i) {
                setValue("数据" + i, data[i - 1]);
            }
        }
        baseDatas.add(new Word("msgLen", "报文长度"));
        baseDatas.add(new Word("CRC16", "CRC校验"));
        baseDatas.add(new Word("endFrame", "报文尾帧：03 fc"));

        setDefaultValue();
        setValue("总包数", maxPageNum);
        setValue("数据包序号", pageNo);
        setValue("frameType", RgvMessageType.RGV_MAP_MESSAGE.getValue());
    }

    @Override
    protected void setCrc(int crc) {
        setValue("CRC16", crc);
    }

    @Override
    protected void setLength(int length) {
        setValue("msgLen", length);
    }

    @Override
    public Integer getMessageLife() {
        return getValue("life");
    }

    @Override
    public Integer getMessageType() {
        return getValue("frameType");
    }
}
